package com.lxl.utils;

import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;
import java.sql.*;
import java.util.ResourceBundle;

/**
 * @author 北上寻海
 */
public class DbUtil {

    /**
     * 获取连接的类
     * @return 返回连接对象
     * @throws SQLException 数据库异常
     */
    public static Connection getConnection() throws SQLException {
        ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
        String driver = bundle.getString("driver");
        String url = bundle.getString("url");
        String username = bundle.getString("username");
        String password = bundle.getString("password");

        try {
                Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return DriverManager.getConnection(url,username,password);
    }

    /**
     * 关闭资源的方法
     * @param rs 查询结果集
     * @param ps 数据库操作对象
     * @param con 数据库连接对象
     */
    public static void close(ResultSet rs, PreparedStatement ps, Connection con){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(con!=null){
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 增删改的操作
     * @param sql 需要执行的sql语句
     * @return 成功与否
     * @throws SQLException 数据库异常
     */
    public static int update(String sql,Object...params) throws SQLException {

        Connection con = DbUtil.getConnection();
        PreparedStatement ps = con.prepareStatement(sql);
        for(int i=0;i<params.length;i++){
            ps.setObject(i+1,params[i]);
        }
        int result =  ps.executeUpdate();
        DbUtil.close(null,ps,con);
        return result;
    }

    /**
     * 查询方法
     * @param sql 待执行sql
     * @param params sql语句待注入参数
     * @return Result
     * @throws SQLException
     */
    public static  Result select(String sql,Object...params) throws SQLException {
        Connection con = DbUtil.getConnection();
        PreparedStatement ps = con.prepareStatement(sql);
        //占位符填充
        for(int i=0;i<params.length;i++){
            ps.setObject(i+1,params[i]);
        }
        ResultSet rs = ps.executeQuery();
        Result result = ResultSupport.toResult(rs);
        DbUtil.close(rs,ps,con);
        return result;
    }

}
